package vues;

import java.util.LinkedList;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.UIManager;

import logique.administration.AjoutRoute;
import logique.administration.AjoutTroncon;
import logique.administration.ModifRoute;
import logique.administration.Modification;
import logique.administration.SuppressionTroncon;
import logique.reseau.Route;
import logique.reseau.Troncon;
import logique.reseau.Ville;
import logique.reseau.atouts.ATTGenerique;
import logique.reseau.caracteristiques.Peage;
import logique.reseau.caracteristiques.Radar;
import logique.reseau.classements.Autoroute;
import logique.reseau.classements.Classement;
import logique.reseau.classements.Departementale;
import logique.reseau.classements.Nationale;

public class PanelRoute extends javax.swing.JFrame {
	
	private PanelAdministration admin;
	private JLabel jLabelNom;
	private JLabel jLabelType;
	private JLabel jLabelTroncon;
	private JFrame jFrameEditerRoute;
	private JComboBox jComboBoxType;
	private JTextField jTextFieldNom;
	private JScrollPane jScrollPaneTroncon;
	private JList jListTroncon;
	private JButton jButtonSupprimer;
	private JButton jButtonValider;
	private JButton jButtonAnnuler;
	private JButton jButtonAjouter;
	private JPanel jPanelTroncon;
	private JLabel jLabelVilleDep;
	private JLabel jLabelVilleArr;
	private JLabel jLabelVitesse;
	private JLabel jLabelRadar;
	private JLabel jLabelTouristique;
	private JLabel jLabelPayant;
	private JLabel jLabelLongueur;
	private JLabel jLabelKmH;
	private JComboBox jComboBoxVilleDep;
	private JComboBox jComboBoxVilleArr;
	private JComboBox jComboBoxRadar;
	private JComboBox jComboBoxPayant;
	private JComboBox jComboBoxTouristique;
	private JTextField jTextFieldVitesse;
	private JTextField jTextFieldLongueur;
	private JButton jButtonSauvegarder;
	private LinkedList<Modification> modifToDo;
	private Route route;
	private boolean nouveauTroncon = false;
	private boolean nouvelleRoute;
	
	private void initNom(String r){
		if (!nouvelleRoute){
	    	jTextFieldNom.setText(r);
	    }
	}
	
	private void initType(String r){
		if (!nouvelleRoute){
	    	if(this.route.getClassement() != null){
	    		jComboBoxType.setSelectedItem(this.route.getClassement().intitule());
	    	}else{
	    		jComboBoxType.setSelectedItem(Departementale.getInstance().intitule());
	    	}
	    }
	}
	
	private void initVilles(){
//		on recupere toutes les villes
		String[] villes = new String[admin.getMesVilles().size()];
		int i = 0;
		for (Ville v:admin.getMesVilles().values()){
			villes[i] = v.getNom();
			i++;
		}
		java.util.Arrays.sort(villes) ;
		
		jComboBoxVilleDep.setModel(new javax.swing.DefaultComboBoxModel(villes));
		jComboBoxVilleArr.setModel(new javax.swing.DefaultComboBoxModel(villes));
	}
	
	private void initTroncons(String r){
//		affichage des troncons
		if (!nouvelleRoute){
	    	if(this.route.getTroncons().size() >0){
	    		int size = this.route.getTroncons().size();  
		        String[] l = new String[size];
		        for (int j=0; j<size; j++){
		        	l[j] = this.route.getTroncons().get(j).getVille1().getNom() + " - " + this.route.getTroncons().get(j).getVille2().getNom();
		        }
   
		        java.util.Arrays.sort(l) ;
		        jListTroncon.setListData(l);
	    	}
	    }
	}
	
	public PanelRoute(PanelAdministration admin, String r){
//		Enregistrement de la reference sur la fenetre principale
		this.admin = admin;
		this.route = admin.rechercherRoute(r);
		nouvelleRoute = (this.route == null);
				
//		Le look and feel de l'application est choisi en fonction de la plateforme
		try {
			UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
		} catch(Exception e) {
			System.err.println("Impossible to load the native look and feel for this platform.");
		}
		
		jScrollPaneTroncon = new JScrollPane();
		jListTroncon = new JList();
		jLabelNom = new JLabel();
		jLabelType = new JLabel();
		jLabelTroncon = new JLabel();
		jFrameEditerRoute = new JFrame();
		jTextFieldNom = new JTextField();
		jComboBoxType = new JComboBox();
		jButtonAjouter = new JButton();
		jButtonSupprimer = new JButton();
		jButtonValider = new JButton();
		jButtonAnnuler = new JButton();
		
		jPanelTroncon = new JPanel();
		jButtonSauvegarder = new JButton();
		jLabelVilleDep = new JLabel();
		jLabelVilleArr = new JLabel();
		jLabelVitesse = new JLabel();
		jLabelTouristique = new JLabel();
		jLabelRadar = new JLabel();
		jLabelPayant = new JLabel();
		jLabelLongueur = new JLabel();
		jComboBoxVilleDep = new JComboBox();
		jComboBoxVilleArr = new JComboBox();
		jTextFieldVitesse = new JTextField();
		jTextFieldLongueur = new JTextField();
		jComboBoxRadar = new JComboBox();
		jComboBoxPayant = new JComboBox();
		jComboBoxTouristique = new JComboBox();
		jLabelKmH = new JLabel();
		 modifToDo = new LinkedList<Modification>();
		
		jFrameEditerRoute.getContentPane().setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout());
		
		jLabelNom.setText("Nom : ");
		jFrameEditerRoute.getContentPane().add(jLabelNom, new org.netbeans.lib.awtextra.AbsoluteConstraints(10, 20, -1, -1));
		
		initNom(r);
		
		jFrameEditerRoute.getContentPane().add(jTextFieldNom, new org.netbeans.lib.awtextra.AbsoluteConstraints(110, 20, 220, -1));
		
		jLabelType.setText("Type : ");
		jFrameEditerRoute.getContentPane().add(jLabelType, new org.netbeans.lib.awtextra.AbsoluteConstraints(10, 70, -1, -1));
		
		jComboBoxType.setModel(new javax.swing.DefaultComboBoxModel(new String[] { Autoroute.getInstance().intitule(), Departementale.getInstance().intitule(), Nationale.getInstance().intitule()}));
		jComboBoxType.addActionListener(new java.awt.event.ActionListener() {
			public void actionPerformed(java.awt.event.ActionEvent evt) {
				TypeChange(evt);
			}
		});
		
		jFrameEditerRoute.getContentPane().add(jComboBoxType, new org.netbeans.lib.awtextra.AbsoluteConstraints(110, 70, 220, -1));
		
		initType(r);
		
		jLabelTroncon.setText("Tron\u00e7ons : ");
		jFrameEditerRoute.getContentPane().add(jLabelTroncon, new org.netbeans.lib.awtextra.AbsoluteConstraints(10, 130, -1, -1));
		
		jListTroncon.addMouseListener(new java.awt.event.MouseAdapter() {
			public void mouseClicked(java.awt.event.MouseEvent evt) {
				choixTroncon(evt);
			}
		});
		
		jScrollPaneTroncon.setViewportView(jListTroncon);
		
		initTroncons(r);
	
		jFrameEditerRoute.getContentPane().add(jScrollPaneTroncon, new org.netbeans.lib.awtextra.AbsoluteConstraints(110, 120, 220, 80));
		
		jButtonAjouter.setText("Ajouter");
		jButtonAjouter.addMouseListener(new java.awt.event.MouseAdapter() {
			public void mouseClicked(java.awt.event.MouseEvent evt) {
				AjouterTroncon(evt);
			}
		});
		
		jFrameEditerRoute.getContentPane().add(jButtonAjouter, new org.netbeans.lib.awtextra.AbsoluteConstraints(350, 130, 80, -1));
		
		jButtonSupprimer.setText("Supprimer");
		jButtonSupprimer.addMouseListener(new java.awt.event.MouseAdapter() {
			public void mouseClicked(java.awt.event.MouseEvent evt) {
				supprimerTroncon(evt);
			}
		});
		
		jFrameEditerRoute.getContentPane().add(jButtonSupprimer, new org.netbeans.lib.awtextra.AbsoluteConstraints(350, 170, -1, -1));
		
		jButtonValider.setText("Valider");
		jButtonValider.addMouseListener(new java.awt.event.MouseAdapter() {
			public void mouseClicked(java.awt.event.MouseEvent evt) {
				sourisValiderRoute(evt);
			}
		});
		
		jFrameEditerRoute.getContentPane().add(jButtonValider, new org.netbeans.lib.awtextra.AbsoluteConstraints(260, 460, -1, -1));
		
		jButtonAnnuler.setText("Annuler");
		jButtonAnnuler.addMouseListener(new java.awt.event.MouseAdapter() {
			public void mouseClicked(java.awt.event.MouseEvent evt) {
				sourisAnnulerRoute(evt);
			}
		});
		
		jFrameEditerRoute.getContentPane().add(jButtonAnnuler, new org.netbeans.lib.awtextra.AbsoluteConstraints(360, 460, -1, -1));
		
		jPanelTroncon.setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout());
		
		jPanelTroncon.setBorder(javax.swing.BorderFactory.createEtchedBorder());
		jButtonSauvegarder.setText("Sauvegarder le tron\u00e7on");
		jButtonSauvegarder.addMouseListener(new java.awt.event.MouseAdapter() {
			public void mouseClicked(java.awt.event.MouseEvent evt) {
				sauvegarderTroncon(evt);
			}
		});
		
		jPanelTroncon.add(jButtonSauvegarder, new org.netbeans.lib.awtextra.AbsoluteConstraints(240, 170, -1, -1));
		
		jLabelVilleDep.setText("Ville de d\u00e9part : ");
		jPanelTroncon.add(jLabelVilleDep, new org.netbeans.lib.awtextra.AbsoluteConstraints(20, 20, -1, -1));
		
		jLabelVilleArr.setText("Ville d'arriv\u00e9e : ");
		jPanelTroncon.add(jLabelVilleArr, new org.netbeans.lib.awtextra.AbsoluteConstraints(20, 50, -1, -1));
		
		jLabelVitesse.setText("Vitesse : ");
		jPanelTroncon.add(jLabelVitesse, new org.netbeans.lib.awtextra.AbsoluteConstraints(20, 80, -1, 20));
		
		jLabelTouristique.setText("Touristique : ");
		jPanelTroncon.add(jLabelTouristique, new org.netbeans.lib.awtextra.AbsoluteConstraints(270, 120, -1, -1));
		
		jLabelRadar.setText("Radar : ");
		jPanelTroncon.add(jLabelRadar, new org.netbeans.lib.awtextra.AbsoluteConstraints(20, 120, -1, -1));
		
		jLabelPayant.setText("Payant : ");
		jPanelTroncon.add(jLabelPayant, new org.netbeans.lib.awtextra.AbsoluteConstraints(150, 120, -1, -1));
		
		jLabelLongueur.setText("Longueur : ");
		jPanelTroncon.add(jLabelLongueur, new org.netbeans.lib.awtextra.AbsoluteConstraints(210, 80, -1, 20));
		
		jComboBoxVilleDep.addActionListener(new java.awt.event.ActionListener() {
			public void actionPerformed(java.awt.event.ActionEvent evt) {
				villeDepartChoisie(evt);
			}
		});
		
		jPanelTroncon.add(jComboBoxVilleDep, new org.netbeans.lib.awtextra.AbsoluteConstraints(130, 10, 180, -1));
		
		jComboBoxVilleArr.addActionListener(new java.awt.event.ActionListener() {
			public void actionPerformed(java.awt.event.ActionEvent evt) {
				villeArriveeChoisie(evt);
			}
		});
		
		initVilles();
		
		jPanelTroncon.add(jComboBoxVilleArr, new org.netbeans.lib.awtextra.AbsoluteConstraints(130, 50, 180, -1));
		
		jPanelTroncon.add(jTextFieldVitesse, new org.netbeans.lib.awtextra.AbsoluteConstraints(80, 80, 70, -1));
		
		jPanelTroncon.add(jTextFieldLongueur, new org.netbeans.lib.awtextra.AbsoluteConstraints(280, 80, 60, -1));
		
		jComboBoxRadar.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Non", "Oui" }));
		jPanelTroncon.add(jComboBoxRadar, new org.netbeans.lib.awtextra.AbsoluteConstraints(70, 120, -1, -1));
		
		jComboBoxPayant.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Non", "Oui" }));
		jPanelTroncon.add(jComboBoxPayant, new org.netbeans.lib.awtextra.AbsoluteConstraints(200, 120, -1, -1));
		
		jComboBoxTouristique.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Non", "Oui" }));
		jPanelTroncon.add(jComboBoxTouristique, new org.netbeans.lib.awtextra.AbsoluteConstraints(340, 120, -1, -1));
		
		jLabelKmH.setText("Km/h");
		jPanelTroncon.add(jLabelKmH, new org.netbeans.lib.awtextra.AbsoluteConstraints(160, 80, -1, 20));
		
		jFrameEditerRoute.getContentPane().add(jPanelTroncon, new org.netbeans.lib.awtextra.AbsoluteConstraints(14, 230, 410, 210));
		
		changeApparencePanel(false);
		
		jFrameEditerRoute.setAlwaysOnTop(true);
		jFrameEditerRoute.pack();
		
		//on centre la fenetre
		jFrameEditerRoute.setLocationRelativeTo(admin.getInterfacePrincipale());
		
		jFrameEditerRoute.setVisible(true);
	}
	
	private void changeApparencePanel(boolean val){
		jButtonSauvegarder.setEnabled(val);
		jLabelVilleDep.setEnabled(val);
		jLabelVilleArr.setEnabled(val);
		jLabelVitesse.setEnabled(val);
		jLabelTouristique.setEnabled(val);
		jLabelRadar.setEnabled(val);
		jLabelPayant.setEnabled(val);
		jLabelLongueur.setEnabled(val);
		jComboBoxVilleDep.setEnabled(val);
		jComboBoxVilleArr.setEnabled(val);
		jTextFieldVitesse.setEnabled(val);
		jTextFieldLongueur.setEnabled(val);
		jComboBoxRadar.setEnabled(val);
		jComboBoxPayant.setEnabled(val);
		jComboBoxTouristique.setEnabled(val);
		jLabelKmH.setEnabled(val);
	}
	
	private boolean verifDoublons(javax.swing.JList l, String s){
		for (int i=0; i<l.getModel().getSize(); i++){
			if (((String) l.getModel().getElementAt(i)).equalsIgnoreCase(s)){
				return false;//il y a un doublon
			}
		}
		return true;//tout est ok
	}
	
	private void sourisAnnulerRoute(java.awt.event.MouseEvent evt) {
//		on ferme la frame
		jFrameEditerRoute.setVisible(false);
	}
	
	private Classement getClassement(){
		String valeur = (String)this.jComboBoxType.getSelectedItem();
		
		if (valeur.equals(Departementale.getInstance().intitule())){
			return Departementale.getInstance();
		}
		
		if (valeur.equals(Nationale.getInstance().intitule())){
			return Nationale.getInstance();
		}
		
		if (valeur.equals(Autoroute.getInstance().intitule())){
			return Autoroute.getInstance();
		}
		
		return null;
	}
	
	private void ajouterTroncons(){ //uniquement si se sont des nouveaux troncons
//		on ajoute les troncons
		String temp;
		String s1;
		String s2;
		Ville v1;
		Ville v2;
		Troncon tTemp;
		
		for (int i=0; i<this.jListTroncon.getModel().getSize();i++){
			temp = (String) jListTroncon.getModel().getElementAt(i);

			s1 = temp.substring(0, temp.indexOf(" - "));
			s2 = temp.substring(temp.indexOf(" - ")+3, temp.length());
			
			v1 = admin.rechercherVille(s1);
			v2 = admin.rechercherVille(s2);
			
			tTemp = admin.rechercherTroncon(route, v1, v2);
			if (tTemp != null){
				route.addTroncon(tTemp);
	//			admin.getMesTroncons().add(tTemp);
		//		modifToDo.add(new AjoutTroncon(route, v1, v2));
			}
		}
	}
	
	private void sourisValiderRoute(java.awt.event.MouseEvent evt) {
//		on ajoute la route au panel administration
		String s = jTextFieldNom.getText();
		javax.swing.JList l = this.admin.getListeRoutes();
		
		if (s.equals("")){
			JOptionPane.showMessageDialog(jFrameEditerRoute, "Vous devez nommer la route");
			jTextFieldNom.setText("");
			jTextFieldNom.grabFocus();
			return;
		}else{
			if (nouvelleRoute && verifDoublons(l, s)){
				//c'est une nouvelle route
				//on recupere le contenu courant de la liste et on y ajoute la nouvelle valeur
				String[] liste = new String[l.getModel().getSize()+1];
				liste[0] = s ;
				for (int i=0; i<l.getModel().getSize(); i++){
					liste[i+1] = (String) l.getModel().getElementAt(i);
				}
				
				java.util.Arrays.sort(liste) ;
				l.setListData(liste);

				route.setNom(jTextFieldNom.getText());
				route.setClassement(getClassement());
				ajouterTroncons();
				
				//on sauvegarde
				admin.getMesRoutes().put(route.getNom(), route);
				modifToDo.add(new AjoutRoute(route));
			}else{
				if (!nouvelleRoute){
					//c'est une route preexistante
					//on doit mettre a jour les donn�es
					route.setNom(jTextFieldNom.getText());
					route.setClassement(getClassement());
					
					//on sauvegarde
					Route rSuppr = admin.rechercherRoute(route.getNom());
					admin.getMesRoutes().remove(rSuppr.getNom());
					admin.getMesRoutes().put(route.getNom(), route);
					modifToDo.add(new ModifRoute(rSuppr, route));
				}else{
					JOptionPane.showMessageDialog(jFrameEditerRoute, "Cette route existe déjà");
					jTextFieldNom.setText("");
					jTextFieldNom.grabFocus();
					return;
				}
			}
			//on ajoute les modifs dans le systeme
			for (Modification m:modifToDo){
				admin.getMAJ().ajoutModification(m);
			}
			
			//on ferme la frame
			jFrameEditerRoute.setVisible(false);
		}
	}
	
	private void supprimerTroncon(java.awt.event.MouseEvent evt) {
//		on recupere le contenu courant de la liste et on y enleve la valeur selectionnee
		int size = jListTroncon.getModel().getSize();
		int index = jListTroncon.getSelectedIndex();
		
		if (size > 0 && index>=0){
//			on recupere le Troncon
			String s = (String)jListTroncon.getSelectedValue();
			String s1 = s.substring(0, s.indexOf(" - "));
			String s2 = s.substring(s.indexOf(" - ")+3, s.length());
			
			Ville v1 = admin.rechercherVille(s1);
			Ville v2 = admin.rechercherVille(s2);
		
			Troncon t = admin.rechercherTroncon(this.route, v1, v2);
			modifToDo.add(new SuppressionTroncon(t));
			admin.getMesTroncons().remove(t);

			//on modifie la liste interface
			String[] l = new String[size-1];
			int indexString = 0;
			for (int i=0; i<size; i++){
				if (i != index){
					l[indexString] = (String) jListTroncon.getModel().getElementAt(i);
					indexString++;
				}
			}
			java.util.Arrays.sort(l) ;
			jListTroncon.setListData(l);
		}
	}
	
	private void AjouterTroncon(java.awt.event.MouseEvent evt) {
		nouveauTroncon = true;
		changeApparencePanel(true);
		
		//si c'est une ville tout juste creee, on cree un objet route temporaire
		if(nouvelleRoute){
			this.route = new Route();

			this.route.setNom(jTextFieldNom.getText());
			this.route.setClassement(getClassement());
			//ajouterTroncons();
			
			//on sauvegarde
			admin.getMesRoutes().put(this.route.getNom(), this.route);
			modifToDo.add(new AjoutRoute(this.route));
		}
		
//		on remet les valeurs par defaut
		if (jComboBoxVilleDep.getModel().getSize()>=0){
			jComboBoxVilleDep.setSelectedIndex(0);
		}
		
		if (jComboBoxVilleArr.getModel().getSize()>=0){
			jComboBoxVilleArr.setSelectedIndex(0);
		}
		
		jTextFieldVitesse.setText("");
		jTextFieldLongueur.setText("");
		jComboBoxRadar.setSelectedItem("Non");
		jComboBoxPayant.setSelectedItem("Non");
		jComboBoxTouristique.setSelectedItem("Non");
	}
	
	private void choixTroncon(java.awt.event.MouseEvent evt) {
		nouveauTroncon = !(jListTroncon.getSelectedIndex() >=0);
				
		if (!nouveauTroncon){
			changeApparencePanel(true);
			
			String s = (String)jListTroncon.getSelectedValue();
			String s1 = s.substring(0, s.indexOf(" - "));
			String s2 = s.substring(s.indexOf(" - ")+3, s.length());
			
			jComboBoxVilleDep.setSelectedItem(s1);
			jComboBoxVilleArr.setSelectedItem(s2);
			
			Ville v1 = admin.rechercherVille(s1);
			Ville v2 = admin.rechercherVille(s2);
		
			Troncon t = admin.rechercherTroncon(this.route, v1, v2);
		
			if (t.getAtoutsTouristiques().size()>0){
				this.jComboBoxTouristique.setSelectedItem("Oui");
			}else{
				this.jComboBoxTouristique.setSelectedItem("Non");
			}
			this.jTextFieldLongueur.setText(Integer.toString(t.getLongueur()));
			this.jTextFieldVitesse.setText(Integer.toString(t.getVitesse()));
			
			if (t.getCaracteristique(Radar.getInstance().intitule()) == null){
				this.jComboBoxRadar.setSelectedItem("Non");
			}else{
				this.jComboBoxRadar.setSelectedItem("Oui");
			}
			
			if (t.getCaracteristique(Peage.getInstance().intitule()) == null){
				this.jComboBoxPayant.setSelectedItem("Non");
			}else{
				this.jComboBoxPayant.setSelectedItem("Oui");
			}
		}
	}
	
	private void TypeChange(java.awt.event.ActionEvent evt) {
///////////////////////////////
//ICI ON POURRAIT PERMETTRE LA CREATION DE NOUVEAU TYPE//
///////////////////////////////
	}
	
	private Troncon remplirNewTroncon(String v1, String v2){
		Troncon t = new Troncon();
		t.setRoute(this.route);
						
		if (this.jComboBoxTouristique.getSelectedItem().equals("Oui")){
			t.addAtoutTouristique(ATTGenerique.getInstance());
		}

		if (this.jComboBoxRadar.getSelectedItem().equals("Oui")){
			t.addCaracteristique(Radar.getInstance());
		}
		
		if (this.jComboBoxPayant.getSelectedItem().equals("Oui")){
			t.addCaracteristique(Peage.getInstance());
		}
		
		t.setVitesse(Integer.parseInt(this.jTextFieldVitesse.getText()));
		t.setLongueur(Integer.parseInt(this.jTextFieldLongueur.getText()));
		
		t.setVille1(this.admin.rechercherVille(v1));
		t.setVille2(this.admin.rechercherVille(v2));
		
		return t;
	}
	
	private boolean toutRempli(){
		if (this.jTextFieldVitesse.getText().equals("")){
			return false;
		}
		
		try {
			int i = Integer.parseInt(this.jTextFieldVitesse.getText());
			if (i<=0){
				return false;
			} 
		} catch (NumberFormatException e) {
			return false;
		}
		
		if(this.jTextFieldLongueur.getText().equals("")){
			return false;
		}
		try {
			int i = Integer.parseInt(this.jTextFieldLongueur.getText());
			if (i<=0){
				return false;
			}
		} catch (NumberFormatException e) {
			return false;
		}
		
		if (((String)jComboBoxVilleDep.getSelectedItem()).equals((String)jComboBoxVilleArr.getSelectedItem())){
			return false;
		}

		return true;
	}
	
	private boolean rechercherDoublon(String t){
		//recherche dans jListTroncon
		for (int i=0; i<jListTroncon.getModel().getSize(); i++){
			if (((String) jListTroncon.getModel().getElementAt(i)).equals(t)){
				return true;
			}
		}
		return false;
	}
	
	private void sauvegarderTroncon(java.awt.event.MouseEvent evt) {  
		String v1 = (String)jComboBoxVilleDep.getItemAt(jComboBoxVilleDep.getSelectedIndex());
		String v2 = (String)jComboBoxVilleArr.getItemAt(jComboBoxVilleArr.getSelectedIndex());
		String v3 = v1 + " - " + v2;
		
		Ville ville1 = admin.rechercherVille(v1);
		Ville ville2 = admin.rechercherVille(v2);
		
		if (toutRempli()){
	//		on empeche de choisir les memes villes pour le depart et l'arrivee
			if (v1.equals(v2)){
				JOptionPane.showMessageDialog(jFrameEditerRoute, "Vous ne pouvez pas choisir la m�me ville pour le d�but et la fin du tron�on");
				jComboBoxVilleDep.grabFocus();
			}else{
				//insertion dans jListTroncon
				if (nouveauTroncon){//c'est un nouveau troncon
					System.out.println("nouveau troncon");
						if ((!rechercherDoublon(v3)) && (!rechercherDoublon(v2 + " - " + v1))){
							String[] liste = new String[jListTroncon.getModel().getSize()+1];
							liste[0] = v3 ;
							for (int i=0; i<jListTroncon.getModel().getSize(); i++){
								liste[i+1] = (String) jListTroncon.getModel().getElementAt(i);
							}
							
							java.util.Arrays.sort(liste) ;
							jListTroncon.setListData(liste);

							//on ajoute le nouveau troncon
							Troncon tMod = remplirNewTroncon(v1, v2);
							modifToDo.add(new AjoutTroncon(tMod));
							admin.getMesTroncons().add(tMod);
							route.addTroncon(tMod);
						}else{
							JOptionPane.showMessageDialog(jFrameEditerRoute, "Ce tron�on existe d�j�.");
							changeApparencePanel(true);
							return;
						}
				}else{//c'est une modif
					System.out.println("ancien troncon");
					String[] liste = new String[jListTroncon.getModel().getSize()];
					for (int i=0; i<jListTroncon.getModel().getSize(); i++){
						if (i == jListTroncon.getSelectedIndex()){
							liste[i] = v3;
						}else{
							liste[i] = (String) jListTroncon.getModel().getElementAt(i);
						}
					}
					
					java.util.Arrays.sort(liste) ;
					jListTroncon.setListData(liste);
					
					//on modifie le troncon 
					Troncon tSuppr = admin.rechercherTroncon(this.route, ville1, ville2);
					modifToDo.add(new SuppressionTroncon(tSuppr));
					admin.getMesTroncons().remove(tSuppr);
					route.removeTroncon(tSuppr);
					Troncon tMod = remplirNewTroncon(v1, v2);
					modifToDo.add(new AjoutTroncon(tMod));
					admin.getMesTroncons().add(tMod);
					route.addTroncon(tMod);
				}
				changeApparencePanel(false);
			}
		}else{
			JOptionPane.showMessageDialog(jFrameEditerRoute, "Vous devez remplir toutes les informations sur le tronçon, et ne pas choisir la même ville pour le départ et l'arrivée, et indiquer des valeurs num�riques positives pour la vitesse et la longueur");
		}
	}                                   
	
	private void villeArriveeChoisie(java.awt.event.ActionEvent evt) {                                     

	}                                    
	
	private void villeDepartChoisie(java.awt.event.ActionEvent evt) {                                    
	
	}                                   
	
}
